# 获取当前目录名称作为可执行文件名称
TARGET = $(notdir $(CURDIR))

# 编译器选择（默认使用 gcc，可以通过环境变量 CC 覆盖）
CC ?= gcc

# 编译器选项
# CFLAGS = -std=c11 -Iinc -Wall -Wextra -Werror
CFLAGS = -std=c11 -Iinc -Wall -Wextra
# 源文件和目标文件目录
SRC_DIR = src
BUILD_DIR = build
SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SRC))

# 规则
all: $(TARGET)

$(TARGET): $(OBJ)
	$(CC) $(CFLAGS) -o $@ $^

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

# 创建构建目录
$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

# 清理
clean:
	rm -rf $(BUILD_DIR) $(TARGET)

# 运行程序
run: $(TARGET)
	./$(TARGET)
	
# 伪目标
.PHONY: all clean
